SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS OFF
GO
CREATE PROCEDURE [dbo].[paChequearRectificacionAltaDeServicio]
-- <DESCRIPCION> Realiza el Chequeo de movimiento de alta de a 1 o varias plazas.
-- <CONSIDERACIONES ESPECIALES>  Alta de Incrementos de Horas y Situaciones Extraordinarias y Actualizacion de dueño actual y ultimo docente
-- <TABLAS> tb_ServiciosAgentes, tb_SubServiciosAgentes, tb_ColaDeMovimientos, tb_PlazasDeMovimiento, tb_RelInterServivcios (incremento de horas), tb_Movimientos, tb_Plazas
-- <ACTUALIZACIONES> 20 - 03 -2006 por OTERO, Javier. |  21 - 03 - 2006 por OTERO, Javier (Incrementos de Horas)
-- <ACTUALIZACIONES> 22 - 03 -2006 por SANES, Jorge. (Mensaje Acumulacion de Horas)  | 24 - 03 - 2006 por OTERO, Javier. (Se agregan controles de Fecha de Plazas y Fechas del Movimiento)
-- <ACTUALIZACIONES> 27 - 03 -2006 por SANES, Jorge. (Control sobre comparacion Horas Suplente con Horas Titular)
-- <ACTUALIZACIONES> 28 - 03 -2006 por SANES, Jorge. (Control de Altas por Transferencias no controla inconpatibilidad horaria, corregir control de Servicio Relacionado )  
-- <ACTUALIZACIONES> 29 - 03 -2006 por SANES, Jorge. (Controles de Tipo de Alta Acrecentamiento (Tipo 16) de Horas)
-- <ACTUALIZACIONES> 29 - 03 -2006 por SANES, Jorge. (Controles de Tipo de Alta Parejas Pedagogicas (Tipo 17) de Horas)
-- <ACTUALIZACIONES> 29 - 03 -2006 por OTERO, Javier. (Control de limites de dias respecto a la fecha del dia para pasar un Movimiento)
-- <ACTUALIZACIONES> 30 - 03 -2006 por SANES, Jorge. (Cambio en Topes y Calculo de Incompatibilidad Horaria)
-- <ACTUALIZACIONES> 31 - 03 -2006 por SANES, Jorge. (Cambio en Calculo de Incompatibilidad Horaria tomar tipos de servicio 1 y 2 )
-- <ACTUALIZACIONES> 03 - 04 -2006 por FIGUERO, Roberto - SANES, Jorge. (Cambio en Calculo de Incompatibilidad Horaria )
-- <ACTUALIZACIONES> 05 - 04 -2006 por FIORUCCI, Adriana y SANES, Jorge. (Se le agrego el control de que si la Rectificacion Borra el Servicio no se realice ningun chequeo extra)
-- <ACTUALIZACIONES> 05 - 04 -2006 por FIORUCCI, Adriana y SANES, Jorge. (Cambio en Cada Select que Acumula Horas para tener en cuenta la Fecha de Baja si se trata de Altas que Incian y Terminan )
-- <ACTUALIZACIONES> 06 - 04 -2006 por  SANES, Jorge  (Esto quedo asi  SET @Fecha2 = @Fecha2 - 1   ---- Se le resta un dia porque asi sera generada la Fecha de Baja del Servicio para el Control de Incompatibilidad)
-- <ACTUALIZACIONES> 06 - 04 -2006 por  SANES, Jorge  (Se cambio OR por AND en IF para ver si no debe cargar las Horas por 131)
-- <ACTUALIZACIONES> 07 - 04 -2006 por  SANES, Jorge  (Se cambio el control sobre las horas 131 porque no dan los tiempos en los movimientos informados por las Escuelas, se retorna Codigo 2 con posibilidad forzar)
-- <ACTUALIZACIONES> 10 - 04 -2006 por FIORUCCI, Adriana y SANES, Jorge. (Cambio en Cada Select que Acumula Horas se quito el Max contra los subservicios, se utiliza las fechas del Subservicio y se mira para la incompatibilidad en el dia del alta del servicio)
-- <ACTUALIZACIONES> 02 - 05 -2006 por FIORUCCI, Adriana  (Agregué en Hrs Terciarias el filtro para que no cuente los subservicios con licencia y cuenta incompatibilidad)
-- <ACTUALIZACIONES> 19 - 05 -2006 por SANES, Jorge. (Controles de Tipo de Alta Concentracion de Tareas (Tipo 19) de Horas)
-- <ACTUALIZACIONES> 03 - 04 -2007 por SANES, Jorge. (el filtro para que no cuente los subservicios con licencia y cuenta incompatibilidad)
-- <ACTUALIZACIONES> 08 - 04 -2007 por SANES, Jorge. (Cambio en Control de InCompatibilidad Horaria se toma de la Causa de Alta se agrego campo en la Tabla)
-- <ACTUALIZACIONES> 15 - 05 -2007 por FIORUCCI, Adriana y SANES, Jorge. (Agregar control cuando la Rectificacion Intenta borrar el Servicio, agregar manejo en pantalla cuando el  control retorna 99 para el modo escula)
-- <ACTUALIZACIONES> 27 - 11 -2007 por FIORUCCI, Adriana  (Cambio en Control de InCompatibilidad Horaria)
-- <ACTUALIZACIONES> 28 - 03 -2008 por SANES, Jorge  (Se agrego que cuanto se intenta Deshacer el Alta no se realice el chequeo de Incompatibilidad Horaria)
-- <ACTUALIZACIONES> 08 - 04 -2008 por SANES, Jorge  (Cambio en Control de InCompatibilidad Horaria se agrego control contra la Tb_RelIterservicio y las Plazas PT) (Referencia -- Agregado 08-04-2008)
-- <ACTUALIZACIONES> 03 - 07 -2008  por OTERO, Marcelo y SANES, Jorge  (Cambio de Control de InCompatibilidad Horaria, se cambio totalmente la forma)
-- <ACTUALIZACIONES> 16 - 02 -2009  por OTERO, Marcelo y SANES, Jorge  (cambios en control de rectificacion de Fecha de Alta, que no sea posterior a la fecha de baja) referencia :-- Actualizado 16-02-2009

---------------------------------------------------
-- Publicado en DB SAGENet
--	29-07-2008   -  OTERO, Marcelo y SANES, Jorge

--
@IdCola INT,
@Estado INT OUTPUT,
@Diagnostico VARCHAR(1000) OUTPUT
AS
SET NOCOUNT ON
-- Fecha de Alta en la cola de movimientos
DECLARE @Fecha1 DATETIME
-- Fecha de Baja en la cola de movimientos
DECLARE @Fecha2 DATETIME
-- Almacena la plaza donde trabajara el agente.
DECLARE @idPlaza INT
DECLARE @SubServicio INT
DECLARE @BorrarAlta VARCHAR(1)  --- Agregado 05-04-2006
-- ID del Agente que afecta el movimiento.
DECLARE @Agente INT
-- Para almacenar la acumulacion horaria del agente en horas.
DECLARE @AcumHorariaH INT
--Para almacenar la acumulacion horaria del agente en cargos no terciarias (por equivalencia horaria del cargo)
DECLARE @AcumHorariaC INT
--Para almacenar la acumulacion horaria del agente en cargos terciarios (por equivalencia horaria del cargo)
DECLARE @AcumHorariaCTer INT -- Creada el 3/4/2006
-- Para almacenar la acumulacion horaria total.
DECLARE @AcumHoraria INT
-- Almacena el Total de Horas nuevas (de los movimientos que se pasan)
DECLARE @SumHorasNuevas INT
-- Horas dadas de alta para el Agente con Articulo 131
DECLARE @Horas131 INT
-- Total de horas terciarias que tiene el agente.
DECLARE @HorasTerciarias INT
DECLARE @MinHorasTerciarias INT
DECLARE @ServicioARelacionar INT
DECLARE @CausaAlta INT
-- Almacena las horas de movimientos sin procesar
DECLARE @HorasPendientes INT
-- Almacena el parametro para contar la cantidad de dias permitidos para pasar un movimiento posterior.
DECLARE @DiasPosterioresAlta INT
-- Almacena el parametro para contar la cantidad de dias permitidos para pasar un movimiento anterior a la fecha.
DECLARE @DiasAnterioresAlta INT
-- Almacena el parametro para contar la cantidad de dias permitidos para pasar un movimiento con fecha de baja posterior a la fecha.
DECLARE @DiasPosterioresBaja INT
-- Almacena el parametro para contar la cantidad de dias permitidos para pasar un movimiento con fecha de baja anterior a la fecha.
DECLARE @DiasAnterioresBaja INT

-- Variable para retorno de diagnostico.
SELECT @Diagnostico = ' '
-- Guarda la fecha de alta de la plaza
DECLARE @FAltaPlaza DATETIME
-- Guarda la Fecha de Baja de la Plaza
DECLARE @FBajaPlaza DATETIME
-- Se utiliza para guardar el CUPOF de la plaza
DECLARE @CUPOF VARCHAR(40)
DECLARE @Baja VARCHAR(1)
DECLARE @error INT
DECLARE @cod INT
DECLARE @regimensuplencias INT
DECLARE @situacionrevista VARCHAR(2)
-- Almacena le valor del parametro TopeDeHorasDeServicios
DECLARE @TopeHorasDeServicios INT
DECLARE @TopeHorasTotales INT 
DECLARE @TipoDePaquete INT
-- Almacena el codigo de Paquete de Plaza
DECLARE @Paquete INT
-- Almacena el Nombre de un Agente Agente (para mensajes de retorno)
DECLARE  @nagente VARCHAR(25)
-- Almacena Situacion de Revista de un Agente (para mensajes de retorno)
DECLARE @sitrevagente VARCHAR(2)
DECLARE @AgenteAnterior INT
DECLARE @SitRevAgenteNuevo INT
DECLARE @HoraDePlaza VARCHAR(1)
DECLARE @CantidadDeHoras INT
DECLARE @CargoSalarial INT
DECLARE @Escalafon INT 
DECLARE @HorasServiciosExternos INT
DECLARE @HorasServiciosExternosTer INT -- Creada el 3/4/2006
DECLARE @IdServicio INT
DECLARE @HorasTotales INT
-- Para almacenar el modo del usuario.
DECLARE @Modo INT
DECLARE @ExisteMovimientoPendiente BIT
DECLARE @ExisteMovimientoAprobado BIT
DECLARE @ExistenSubServiciosNoPuedoBorrar BIT
DECLARE @EsIncremento BIT
-- Para Control de InCompatibilidad Horaria (08/04/2007)
DECLARE @CausaAltaChequeaIncompatibilidad VARCHAR(1) 

DECLARE @FechaAltaPrimerSub DATETIME
DECLARE @FechaBajaPrimerSub DATETIME
DECLARE @FechaAltaSubServicioLicencia DATETIME
DECLARE @SituacionLaboralPrimerSub INT 
DECLARE @LicenciaSubServicio INT 

-- Declarar Variables para Nuevo Control de Incompatibilidad
DECLARE @IncompatibleChk INT 
DECLARE @EstadoChk INT 
DECLARE  @DiagnosticoChk VARCHAR(200)


-- INICIALIZAR VARIABLES
SET @IncompatibleChk = 0 
SET @EstadoChk = 0 
SET @DiagnosticoChk = ''

SET @FechaBajaPrimerSub = NULL
SET @BorrarAlta = 'N'
SET @AcumHoraria=0
SET @SumHorasNuevas=0
SET @HorasPendientes=0
SET @HorasTotales=0
SET @Horas131=0

SET @HorasServiciosExternos=0
SET @HorasServiciosExternosTer=0 -- Creada el 3/4/2006

SET @CantidadDeHoras=0
SET @AcumHorariaH=0
SET @AcumHorariaC=0
SET @AcumHorariaCTer=0  -- Creada el 3/4/2006
SET @HorasTerciarias=0

SET @cod = 0
SET @error = 0
SET @ExisteMovimientoPendiente = 0
SET @ExisteMovimientoAprobado = 0
SET @ExistenSubServiciosNoPuedoBorrar = 0 
SET @EsIncremento = 0

SET @CausaAltaChequeaIncompatibilidad = 'N'

SELECT @Modo = Modo FROM tb_Usuarios WHERE NTUser = SYSTEM_USER

-- Saca el Tope de Horas a controlar.
SELECT @TopeHorasDeServicios = CONVERT(INT, valor1) FROM tb_Parametros WHERE Parametro like 'TopeHorasDeServicios'
SELECT @DiasPosterioresAlta = CONVERT(INT, Valor1) FROM tb_Parametros WHERE Parametro = 'DiasDeDiferenciaParaFechasDeAltaPosterior'
SELECT @DiasAnterioresAlta = CONVERT(INT, Valor1) FROM tb_Parametros WHERE Parametro = 'DiasDeDiferenciaParaFechasDeAltaAnteriores'
SELECT @DiasPosterioresBaja = CONVERT(INT, Valor1) FROM tb_Parametros WHERE Parametro = 'DiasDeDiferenciaParaFechasDeBajaPosterior'
SELECT @DiasAnterioresBaja = CONVERT(INT, Valor1) FROM tb_Parametros WHERE Parametro = 'DiasDeDiferenciaParaFechasDeBajaAnteriores'
SELECT @TopeHorasTotales =  CONVERT(INT, valor1) FROM tb_Parametros WHERE Parametro like 'TopeHorasTotalesDeServicios'

-- La proxima query se modifico el 3/4/2006
SELECT @Fecha1 = Fecha1, @Fecha2 = Fecha2, @Agente = Agente, @SitRevAgenteNuevo = sitrev, @CausaAlta = CausaAlta, @CantidadDeHoras = CantidadHoras,
	@CargoSalarial = CargoSalarial, @situacionrevista=tb_SituacionRevista.mnemo,@Escalafon=tb_cargossalariales.escalafon 
FROM tb_ColaDeMovimientos inner join tb_SituacionRevista on tb_SituacionRevista.idSituacionRevista=tb_ColaDeMovimientos.sitrev 
INNER JOIN Tb_CargosSalariales on tb_ColaDeMovimientos.cargosalarial=tb_cargossalariales.idcargo
  WHERE idCola = @idCola


-- Id de Servicio. --- 17-05-2007
SELECT @IdServicio = IDServicioBase, @BorrarAlta=Borrar 
	FROM tb_PlazasDeMovimiento
	WHERE IdCola = @IdCola

-- Si  es un Movimiento viejo que no tiene en la Plaza de Movimiento el ID de Servicio en el campo IDServicioBase - 17-05-2007
IF @IdServicio IS NULL
  -- Id de Servicio.
   SELECT @IdServicio = ServicioAgente, @BorrarAlta=Borrar 
	FROM tb_PlazasDeMovimiento
	INNER JOIN tb_SubServiciosAgentes ON Servicio = IdSubServicio
	WHERE IdCola = @IdCola

IF @Fecha2 IS NOT NULL
     SET @Fecha2 = @Fecha2 - 1   ---- Se le resta un dia porque asi sera generada la Fecha de Baja del Servicio
ELSE
     SELECT  @Fecha2 =  FechaBaja FROM Tb_ServiciosAgentes WHERE IdServicioAgente = @IdServicio  -- Actualizado 16-02-2009


IF @BorrarAlta IS NULL
      SET @BorrarAlta = 'N'

IF EXISTS(SELECT top 1 IDSubservicio  FROM tb_SubServiciosAgentes WHERE ServicioAgente = @IdServicio and (situacionlaboral <> 5 or situacionextraordinaria<>1)) -- Agregado 15-05-07
   BEGIN
	   IF @BorrarAlta = 'S'
		   BEGIN 
		        SELECT @ExistenSubServiciosNoPuedoBorrar=1, @Cod = 99, @Diagnostico = 'Error! Existen SubServicios que impiden la Baja!'
		        GOTO SALIR
		   END 

	   -- Buscar primer SubServicio
	   SELECT TOP 1  @SituacionLaboralPrimerSub = SituacionLaboral, @FechaAltaPrimerSub = FechaAlta,  @FechaBajaPrimerSub = Fechabaja
		FROM tb_SubServiciosAgentes
	 	WHERE ServicioAgente = @IdServicio
		ORDER BY FechaAlta

	   -- Cuando la Situacion Laboral del Primer Subservicio no es normal
	  IF @SituacionLaboralPrimerSub <> 5
	       BEGIN 
	          IF @Fecha1 >= @FechaAltaPrimerSub
                            BEGIN
	               	SELECT @ExistenSubServiciosNoPuedoBorrar=1, @Cod = 99, @Diagnostico = 'Error! el Primer SubServicio es una Licencia y debe rectificarla antes!'
	               	GOTO SALIR
		 END 
	        END 
	  ELSE
	       IF @FechaBajaPrimerSub IS NOT NULL  AND @Fecha1 > @FechaBajaPrimerSub
		BEGIN
			-- Buscar el Primer subservicio con Licencia
			SELECT TOP 1 @FechaAltaSubServicioLicencia = FechaAlta, @LicenciaSubServicio = Licencia 
				FROM Tb_SubserviciosAgentes
				WHERE ServicioAgente = @IdServicio 
					AND SituacionLaboral <> 5
					AND Licencia IS NOT NULL 
				ORDER BY FechaAlta
	
			IF @Fecha1 > @FechaAltaSubServicioLicencia
			       BEGIN 
			           SELECT @ExistenSubServiciosNoPuedoBorrar=1, @Cod = 99, @Diagnostico = 'Error! existe una Licencia iniciada antes de la Fecha que desea rectificar el Alta!'
			           GOTO SALIR
			       END 
			IF @Fecha1 = @FechaAltaSubServicioLicencia AND
					         (EXISTS (SELECT IdCausaAlta FROM Tb_CausasAltas WHERE IdCausaAlta = @CausaAlta AND PermiteIniciarConLicencia = 'N' )
						AND EXISTS (SELECT IdLicencia FROM Tb_Licencias WHERE IdLicencia=@LicenciaSubServicio AND MinimoDiasDelServicio>0))
				BEGIN
 				   SELECT @ExistenSubServiciosNoPuedoBorrar=1, @Cod = 99, @Diagnostico = 'Error! Quedaria una licencia como primer SubServicio, no corresponde!'
			                GOTO SALIR
				END 

		END 
	       ELSE
		BEGIN
		    IF @FechaBajaPrimerSub IS NULL 
		         BEGIN 
		            SELECT @ExistenSubServiciosNoPuedoBorrar=1, @Cod = 99, @Diagnostico = 'Error! Inconsistencia en la Información de los SubServicios!'
		            GOTO SALIR
		         END 

		END
	
	   	
    END 	    	


-- Se controla que el movimiento no sea demasiado alejado a la fecha del dia.
IF @Fecha1 < GETDATE() AND (DATEDIFF(DAY, @Fecha1, GETDATE())+1) > @DiasAnterioresAlta
	SELECT @Cod = 1, @Diagnostico = 'Error! El movimiento que se desea pasar es demasiado antiguo (tiene mas de '+CONVERT(VARCHAR, @DiasAnterioresAlta)+' dias).'
ELSE
	IF  (DATEDIFF(DAY, GETDATE(), @Fecha1)+1) > @DiasPosterioresAlta
		SELECT @Cod = 1, @Diagnostico = 'Error! El movimiento que se desea pasar tiene mas de '+CONVERT(VARCHAR, @DiasPosterioresAlta)+' dias posteriores a la fecha'

IF @Fecha2 IS NOT NULL AND @Fecha2 < GETDATE() AND (DATEDIFF(DAY, @Fecha2, GETDATE())+1) > @DiasAnterioresBaja
	SELECT @Cod = 1, @Diagnostico = 'Error! La fecha de baja exede la cantidad de dias permitidos anteriores a la fecha de hoy (tiene mas de '+CONVERT(VARCHAR, @DiasAnterioresAlta)+' dias de diferencia).'
ELSE
	IF @Fecha2 IS NOT NULL AND @Fecha2 > GETDATE() AND (DATEDIFF(DAY, GETDATE(), @Fecha2)+1) > @DiasPosterioresBaja
		SELECT @Cod = 1, @Diagnostico = 'Error! La fecha de baja exede la cantidad de dias permitidos posteriores a la fecha de hoy (tiene mas de '+CONVERT(VARCHAR, @DiasAnterioresAlta)+' dias de diferencia).'

-- Se controla que la fecha de alta sea menor que la fecha de baja
IF @Fecha2 IS NOT NULL
	IF @Fecha2 < @Fecha1
		  BEGIN
		       -- Actualizado 16-02-2009
		       SELECT @Cod = 99, @Diagnostico = 'Error! El Servicio que intenta rectificar esta dado de Baja y la Fecha de Alta que ingreso es posterior a la Baja del mismo, Rectifique primero la Baja'
		       GOTO SALIR
		 END

DECLARE xPlazas CURSOR forward_only  for SELECT idPlaza, Servicio, HorasDePlaza, IDServicioRelacionado  FROM tb_PlazasDeMovimiento WHERE idCola = @idCola
OPEN xPlazas
FETCH NEXT FROM xPlazas INTO @idPlaza, @SubServicio, @HoraDePlaza, @ServicioARelacionar

WHILE @@FETCH_STATUS = 0 
BEGIN
	/* ----------------------------------------------
	Acumulamos las horas nuevas.
	Si la plaza corresponde a un paquete que es del tipo HS X CARGO, CARGOS COMPARTIDOS no se cuentan las horas. 
	Si la plaza es cabecera de un paquete del tipo HS X CARGO, CARGOS COMPARTIDOS se cuenta.
	*/
	SELECT @TipoDePaquete = TipoDePaquete, @Paquete = Paquete, @RegimenSuplencias = regimensuplencias, @FAltaPlaza = FechaAlta, @FBajaPlaza = FechaBaja, @CUPOF = CUPOF, @Baja = Baja
	FROM tb_Plazas WHERE idPlaza = @idPlaza

	IF EXISTS(SELECT top 1  C.IdCola FROM tb_ColaDeMovimientos C INNER JOIN tb_PlazasDeMovimiento P ON P.IdCola = C.IdCola
		WHERE C.IdCola <> @IdCola -- Que no se la misma cola.
		AND C.Agente = @Agente -- El mismo agente.
		AND Fecha1 = @Fecha1 -- La misma fecha de Alta.
		AND IdPlaza = @IdPlaza -- La misma plaza
		AND C.Estado IN (0,1, 3) -- El estado es Chequeado o Warning o Error
	) AND @Modo = 2
	BEGIN
		SELECT @ExisteMovimientoPendiente = 1, @Cod = 99, @Diagnostico = @Diagnostico+'*' + 'Error! El movimiento en la Plaza: '+@CUPOF+' con Codigo de Movimiento: '+CONVERT(VARCHAR, @IdCola)+' se encuentra pendiente. Por favor elimine el movimiento anterior.'
	END

	IF EXISTS(SELECT top 1 C.IdCola FROM tb_ColaDeMovimientos C INNER JOIN tb_PlazasDeMovimiento P ON P.IdCola = C.IdCola
		WHERE C.IdCola <> @IdCola -- Que no se la misma cola.
		AND C.Agente = @Agente -- El mismo agente.
		AND Fecha1 = @Fecha1 -- La misma fecha de Alta.
		AND IdPlaza = @IdPlaza -- La misma plaza
		AND C.Estado IN (4, 5) -- El estado es Aprobado o Aprobado con Observaciones.
	) AND @Modo = 2
	BEGIN
		SELECT @ExisteMovimientoAprobado = 1, @Cod = 99, @Diagnostico = '*' + @Diagnostico+'Error! El movimiento en la Plaza: '+@CUPOF+' con Codigo de Movimiento: '+CONVERT(VARCHAR, @IdCola)+' ya fue aprobado por Personal Docente.'
	END

	-- Se controla que la Fecha de Alta de la Plaza sea anterior a la fecha de alta del movimiento.
	IF EXISTS(SELECT top 1 IdPlaza FROM tb_Plazas WHERE IdPlaza = @IdPlaza AND FechaAlta > @Fecha1)
	BEGIN
		SELECT @Cod = 3, @Diagnostico = @Diagnostico + '*' + 'Error! La Plaza '+@CUPOF+' tiene Fecha de Alta posterior a la fecha del movimiento'
	END
	
	-- REEMPLAZO DE LO ANTERIOR - CREADO 04-04-2006
	-- CONTAR LAS HORAS NUEVAS
	IF (@TipoDePaquete IN (1,3)) OR (@TipoDePaquete IS NULL AND @Paquete IS NULL) 
	BEGIN
		--Es alta por 131
		IF @CausaAlta = 12    --Art131 
			BEGIN 			
				SELECT @Horas131 = @Horas131 + ISNULL(CASE WHEN @HoraDePlaza = 'S' THEN P.Horas ELSE @CantidadDeHoras END, 0)
					FROM tb_Plazas P WHERE IdPlaza = @IdPlaza	
			END 
		  ELSE
			BEGIN
				--Si es Horas Terciarias o es un Cargo Terciario
				IF @CargoSalarial = 4001 or @escalafon=24
				     BEGIN
					SELECT @HorasTerciarias = @HorasTerciarias + ISNULL(CASE WHEN @HoraDePlaza = 'S' THEN P.Horas ELSE @CantidadDeHoras END, 0)
					FROM tb_Plazas P WHERE IdPlaza = @IdPlaza	
				     END
				ELSE
				     BEGIN -- No son horas 131 ni terciarias ni cargos terciarios
					SELECT @SumHorasNuevas = @SumHorasNuevas + 
						ISNULL(CASE 		
						WHEN C.RegimenSalarial  = 12 AND @HoraDePlaza = 'S' THEN P.Horas
						WHEN C.RegimenSalarial  = 12 AND @HoraDePlaza = 'N' THEN @CantidadDeHoras
						WHEN C.RegimenSalarial  = 13 AND @HoraDePlaza = 'S' THEN P.Horas
						WHEN C.RegimenSalarial  = 13 AND @HoraDePlaza = 'N' THEN @CantidadDeHoras
						END,0)
						FROM tb_Plazas P  INNER JOIN tb_CargosSalariales C ON IdCargo = CargoSalarialDefault WHERE IdPlaza = @IdPlaza
				     END 
			END 
	END 	


	--- Control agregado 29-03-2006
	--- Si la Causa de Alta es distinta de "Pareja Pedagogica" (17) no controla estado del Servicio ni tampoco misma situacion de revista
	IF @CausaAlta <> 17
 	    BEGIN 
		-- CONTROLA QUE NO HAYA UN SERVICIO NORMAL EN LA PLAZA.
		SELECT @IdPlaza Plaza, @IdServicio Servicio, @Fecha1 Fecha
		IF EXISTS (SELECT top 1 * FROM tb_ServiciosAgentes S INNER JOIN tb_SubServiciosAgentes SS ON S.IdServicioAgente = SS.ServicioAgente
				WHERE Plaza = @IdPlaza AND S.FechaAlta <= @Fecha1 AND ( (S.FechaBaja IS NULL) OR (S.FechaBaja IS NOT NULL AND S.FechaBaja > @Fecha1)) AND SituacionLaboral = 5 AND IdServicioAgente <> @IdServicio
			AND ( (@EsIncremento = 0) OR (@EsIncremento = 1 AND Agente <> @Agente))
		)
		BEGIN
			SELECT @nAgente = (SELECT Nombres FROM tb_Agentes, tb_Plazas WHERE DuenoActual = idAgente and idPlaza = @idPlaza)
			SELECT  @cod = 1, @Diagnostico = @Diagnostico+'*'+'Error! El agente no puede darse de alta porque plaza '+@CUPOF+' se encuentra ocupada por otro Agente! ( Dueño: '+isnull(@nAgente, ' ')
			SELECT @nAgente = (SELECT Nombres FROM tb_Agentes, tb_Plazas WHERE UltimoDocente = idAgente and idPlaza = @idPlaza)
			IF @nAgente IS NOT NULL
				SELECT @Diagnostico = @Diagnostico + 'Supl. actual: '+@nAgente+')'
			ELSE
				SELECT @Diagnostico = @Diagnostico + ')'
		END
	
		-- NO DEJAR DOS TITULARES O INTERINOS EN LA MISMA PLAZA
		IF EXISTS (SELECT top 1 * FROM tb_ServiciosAgentes S INNER JOIN tb_SubServiciosAgentes SS ON S.IdServicioAgente = SS.ServicioAgente
				WHERE Plaza = @IdPlaza AND ( (S.FechaBaja IS NULL) OR (S.FechaBaja IS NOT NULL AND S.FechaBaja > @Fecha1)) AND SituacionRevista IN (1,2) AND IdServicioAgente <> @IdServicio
				AND ( (@EsIncremento = 0) OR (@EsIncremento = 1 AND Agente <> @Agente))
			)
			AND @SituacionRevista IN ('T', 'I')
		BEGIN
			SELECT @nAgente = ISNULL(MAX(Nombres), ' ') FROM tb_ServiciosAgentes S
			INNER JOIN tb_SubServiciosAgentes SS ON ServicioAgente = IdServicioAgente
			INNER JOIN tb_Agentes A ON IdAgente = Agente
			WHERE Plaza = @IdPlaza AND ( (S.FechaBaja IS NULL) OR (S.FechaBaja IS NOT NULL AND S.FechaBaja > @Fecha1)) AND SituacionRevista IN (1,2)
		
			SELECT @Cod = 1, @Diagnostico = '*' + 'Error! No se puede realizar el alta porque la plaza '+@CUPOF+' esta ocupada por otro Titular o Interino (Dueño: '+@nAgente+')'
		END
	     END 

	
	IF @situacionrevista IN ('S', 'F') AND @regimensuplencias = 13
		SELECT @Cod = 3, @Diagnostico = @Diagnostico+'*'+'La plaza '+@Cupof+' no admite Suplentes Comunes o Funcionales' 	

	-- Se actualizan las Plazas de Movimiento en funcion de si ocurre o no un error.
	--IF @Error = 0
	

	/*
	-- Se quito este control porque en la pantalla de rectificar no se estaba pidiendo el servicio relacionado (22/03/2010)
	IF @CausaAlta = 8 AND (@ServicioARelacionar IS NULL OR @ServicioARelacionar < 0) --Si es designacion por TRANSFERENCIA y no se especifico un Servicio a RELACIONAR
	BEGIN
		SELECT @cod = 3, @Diagnostico = @Diagnostico + '*'+'Cuando se especifica ALTA POR TRANSFERENCIA debe seleccionar el Servicio a relacionar'		
 	END 
	*/

	UPDATE tb_PlazasDeMovimiento SET Estado = @cod WHERE idPlaza = @idPlaza AND idCola = @idCola
	UPDATE tb_ColaDeMovimientos SET EstadoCheck = @cod WHERE idcola = @idcola
						
	FETCH NEXT FROM xPlazas INTO @idPlaza, @SubServicio, @HoraDePlaza, @ServicioARelacionar
 END

--- Control agregado 28-03-2006
--- Si la Causa de Alta es distinta de "Designacion por Transferencia" (8) no controla la Inconpatibilidad de Cargos
--- Control agregado 29-03-2006
--- Si la Causa de Alta es distinta de "Acrecentamiento Horario" (16) no controla la Incompatibilidad de Cargos
--- Control agregado 03-04-2006
--- Si la Causa de Alta es distinta de "125c" (18) no controla la Incompatibilidad de Cargos
--- Control agregado 19-05-2006
--- Si la Causa de Alta es distinta de "Concentracion de Tareas" (19) no controla la Incompatibilidad de Cargos

-- Buscar por la Causa de Alta para ver si Chequea InCompatibilidad (08/04/2007)
SELECT @CausaAltaChequeaIncompatibilidad = ChequeaInCompatibilidad FROM Tb_CausasAltas WHERE IdCausaAlta =  @CausaAlta

-- ------------------------ AGREGADO 28-03-2008 - SI LA RECTIFICACION LO QUE INTENTA ES DESHACER EL ALTA NO SE DEBE CHEQUEAR INCOMPABILIDAD HORARIO ---------------

IF @CausaAltaChequeaIncompatibilidad = 'S' AND @BorrarAlta = 'N'
  BEGIN 
	
	EXEC paChequearIncompatibilidadHorariaV3  'AR', @CausaAlta, @Agente, @SumHorasNuevas, 0, @HorasTerciarias, @Horas131, @Fecha1, @Fecha2, @IdServicio, @IncompatibleChk OUTPUT, @EstadoChk OUTPUT, @DiagnosticoChk OUTPUT

	IF @IncompatibleChk <> 0
		BEGIN 
			---- Un aviso o Imcompatible Total
			SET @Cod = @EstadoChk
			SET  @Diagnostico = @Diagnostico+'*'+@DiagnosticoChk
		END
	
   END 

IF @ExisteMovimientoPendiente = 1 
	SELECT @Cod = 99

IF @ExisteMovimientoAprobado = 1
	SELECT @Cod = 99

UPDATE tb_ColaDeMovimientos SET Estado = @cod, EstadoCheck = @cod, 
ChequeoEscuela = CASE WHEN @Modo = 2 THEN @Diagnostico ELSE ChequeoEscuela END
 WHERE idcola = @idcola

CLOSE xPlazas
DEALLOCATE xPlazas

SALIR:
IF @ExistenSubServiciosNoPuedoBorrar=1
   SET @Cod=99

SET @Estado = @Cod
GO
GRANT EXECUTE ON  [dbo].[paChequearRectificacionAltaDeServicio] TO [CentroDeDesignaciones]
GRANT EXECUTE ON  [dbo].[paChequearRectificacionAltaDeServicio] TO [GestionInstitucional]
GRANT EXECUTE ON  [dbo].[paChequearRectificacionAltaDeServicio] TO [PersonalDocente]
GO
